package com.javatest;

/**
 * @author LL
 * 编写一个静态方法 lg()，接受一个整型参数 N，返回不大于 log2N 的最大整数。不要使用 Math 库。
 * log2N = b =>2sup&b = N
 * @create 2021-01-13 10:34
 */
public class Subject26 {

    //方法一
    public static int lg1(int n){
        int i = 2;
        int j = 0;
        while (true){
            i *= 2;
            j++;
            if (i >= n) {
                return j;
            }
        }
    }

    //方法二
    public static int lg2(int n){
        int shiftRightCount = 0;
        do {
            n >>= 1;
            shiftRightCount++;
        } while (n != 0);
        return shiftRightCount - 1;
    }

    //方法三
    public static int lg3(int n){
        int product = 1;
        int x = -1;
        //*，把等于的情况也纳入进来，从而避免了在如23>5这种情况的自增导致输出结果为3的情况
        while (product <= n){
            product *= 2;
            x++;
        }
        return x;
    }

    public static void main(String[] args) {
        System.out.println(lg3(23));
    }
}
